home *** CD-ROM | disk | FTP | other *** search
/ Ian & Stuart's Australian Mac: Not for Sale / Another.not.for.sale (Australia).iso / fade into you / being there / Issues & Ideas / SGML / hytime.is.annexA < prev    next >
Text File  |  1992-07-21  |  55KB  |  1,154 lines

  1. UNOFFICIAL COMPILATION of the Formal Specifications from Annex A
  2. ("Useful element types, notations, and instances") of the HyTime
  3. Standard (ISO/IEC 10744:1992).  This is not intended to replace
  4. Annex A of the HyTime standard itself;
  5. it is merely intended to provide an electronic form of those
  6. portions of Annex A that HyTime applications implementers could
  7. be expected to want to have in electronic form.  This information
  8. is provided for interim purposes only, and it should be destroyed
  9. when the official electronic version of this information becomes
  10. available.  Again, THIS FILE IS NO SUBSTITUTE FOR THE STANDARD, AND
  11. IT IS NOT THE STANDARD.  THE ONLY RELIABLE SOURCE IS THE OFFICIAL 
  12. PRINTED ISO-SANCTIONED FORM OF THE STANDARD.
  13.  
  14. This file was manually typed from the printed text of the standard.
  15.  
  16. All of this material is subject to the following copyright notice and
  17. license:
  18.  
  19.      Copyright (C) International Organization for Standardization 1992.
  20.      Permission to copy in any form is granted for use with
  21.      conforming HyTime systems and applications as defined in
  22.      ISO/IEC 10744, provided this notice is included in all copies.
  23.  
  24. A.1 HyLex: HyTime lexical model notation
  25.  
  26. A.1.1.2 Delimiters
  27.  
  28. Role    String  Description
  29. ----    ------  -----------
  30. XESC    \       Escape
  31. XGRPO   (       Group open
  32. XGRPC   )       Group close
  33. XLIT    "       Literal start or end
  34. XLITA   '       Literal start or end (alternative)
  35. XSEQ    ,       Sequence connector
  36. XOR     |       Or connector
  37. XDTGO   [       Alternative single-character pattern open
  38. XDTGC   ]       Alternative single-character pattern close
  39. XOPT    ?       Optional occurrence indicator
  40. XREP    +       Required and repeatable
  41. XOREP   *       Optional and repeatable
  42. XMINUS  -       Negation and range
  43. XRNI    #       Reserved name indicator
  44.  
  45. A.1.1.4 Wildcards
  46.  
  47.         #       Any single character
  48.         (#, #+) (prohibited)
  49.         (#+)    (ok)
  50.         (#*)    (ok)
  51.  
  52. A.1.1.5 Hit boundary constraints
  53.  
  54. #SOD    The hit must begin at the start of the match domain
  55. #EOD    The hit must end at the end of the match domain.
  56. #ISC    Ignored starting characters can occur before the hit; 
  57.                 equivalent to: (#SOD, #*).
  58. #IEC    Ignored ending characters can occur after the hit; 
  59.                 equivalent to: (#*, #EOD).
  60.  
  61. A.1.1.6 Alternative single-character patterns (ASCP)
  62.  
  63. Example: [A-Za-z] is any alphabetic character.
  64.  
  65. A.1.1.7 Matching Rules.
  66.  
  67. HyLex finds the longest match for known sub-models (sequences of
  68. literals and ASCPs) and the shortest match for wildcard sequences.
  69.  
  70. Known sub-models are matched in the order they occur, with no overlap.
  71.  
  72. If multiple alternative sub-models (that is, OR group members) start
  73. with the same character, only the longest among them will be matched
  74. at a given point in the match domain.
  75.  
  76. A.1.2 HyLex element type
  77.  
  78. <!-- HyTime Lexical Model -->
  79. <!NOTATION HyLex PUBLIC
  80.            "+//ISO/IEC 10744:1992//NOTATION HyTime Lexical Model Notation//EN" >
  81. <!ELEMENT HyLex -- HyTime lexical model --
  82.                 - -     (#PCDATA) >
  83. <!ATTLIST HyLex HyTime          NAME    #FIXED  lexmodel
  84.                 notation -- Data content notation --
  85.                                 NAME    #FIXED  HyLex
  86.                 delims  -- Data content notation delimiter changes --
  87.                         -- Constraint: names are delimiter role names -
  88.                         -- Constraint: a given NAME can occur only once --
  89.                         -- lextype( (NAME, s+, char*),
  90.                                     s+, NAME, s+, char*)* ) --
  91.                                 CDATA   #IMPLIED -- Default: not changed --
  92.                 ltn     -- Lexical type name --
  93.                                 NAME    #REQUIRED
  94.                 lexord  -- Lexicographic ordering for comparisions --
  95.                         -- reftype(lexord) --
  96.                         -- lextype(IDREF|(RNI,"SGMLCASE")) --
  97.                 boundary -- Hit boundary counstraint --
  98.                                 (sodeod|sodiec|isceod|isciec|inmodel) sodeod
  99.                 qpnpsn  -- QPN property set names --
  100.                         -- Constraint: searched in order listed --
  101.                         -- lextype(NOTATION, (S+, NOTATION)*) --
  102.                                 NAMES   #IMPLIED -- Default: standard sets --
  103.                 qltnlmgi -- QLTN lexical model GIs --
  104.                         -- Constraint: searched in order listed --
  105.                         -- lextype(gil) --
  106.                                 NAMES   #FIXED  HyLex
  107.                 norm    -- normalization --
  108.                                 (norm|unorm) norm
  109.                 wildmax -- Maximum bit combinations in wildcard match --
  110.                                 NUMBER 512 >
  111.  
  112. A.1.3 Useful HyLex types
  113.  
  114. Public identifier for this material:
  115. "ISO/IEC 10744:1992//TEXT Useful HyLex Lexical Types//EN"
  116.  
  117. <!-- Useful Lexical Types -->
  118.  
  119. <hylex  norm ltn=IDRN>     (IDREF | "#NULL")                          </hylex>
  120. <hylex  norm ltn=NAMES>    (NAME, (s+, NAME)*)                        </hylex>
  121. <hylex  norm ltn=GIL>      (GI, (s+, GI)*)                            </hylex>
  122. <hylex  norm ltn=IDR2>     (IDREF, s+, IDREF)                         </hylex>
  123. <hylex  norm ltn=IDR21>    (IDR2, (s+, IDR2)*)                        </hylex>
  124. <hylex  norm ltn=ATTORCON> ((ATTNAME|("#CONTENT"))                    </hylex>
  125. <hylex  norm ltn=num1>     (number, (s+, number)*)                    </hylex>
  126. <hylex  norm ltn=frac>     (number, s+, number) <!--fraction (numerator 1st)-->
  127.                                                                       </hylex>
  128. <hylex  norm ltn=fracs>    (frac, (s+, frac)*)                        </hylex>
  129. <hylex  norm ltn=snum>     ([+-]?,number) <!--signed number-->        </hylex>
  130. <hylex  norm ltn=nzdigit>  ([1-9]) <!--non-zero digit-->              </hylex>
  131. <hylex  norm ltn=unzi>     (nzdigit, digit*) <!--unsigned nonzero integer-->
  132.                                                                       </hylex>
  133. <hylex  norm ltn=snzi>     ([+-]?,unzi) <!--signed nonzero integer--> </hylex>
  134. <hylex  norm ltn=word>     (nmchar+)                                  </hylex>
  135. <hylex  norm ltn=words>    (word, (s+, word)*)                        </hylex>
  136. <hylex  unorm ltn=literal> ((LIT,#*,LIT) | (LITA,#*,LITA)) <!--SGML literal-->
  137.                                                                       </hylex>
  138.  
  139. The following models define string forms for qualified lexical type
  140. names, qualified property names, and function arguments.  The
  141. delimiter roles are SGML delimiter roles, not data content notation
  142. delimiter roles; they cannot be changed by a "delims" attribute.
  143.  
  144. <hylex ltn=qltn> ((LMGI,PLUS)?,LTN)                                  </hylex>
  145. <hylex ltn=qpn>  (((PSN,PLUS)?,(PN,(DSO,(QPN|QLTN|word|literal),DSC)?)),
  146.         (NET,((PSN,PLUS)?,(PN,(DSO,(QPN|QLTN|word|literal),DSC)?)))* </hylex>
  147. <hylex ltn=arg>  (PERO,nzdigit,((digit, digit?)?)                    </hylex>
  148.  
  149.  
  150. A.2 HyTime property definition
  151.  
  152.                 <!-- HyTime Property Definition -->
  153. <!ELEMENT HyPD  -- HyTime Property Definition --
  154.                 - O             (#PCDATA) >
  155. <!ATTLIST HyPD  HyTime  NAME    #FIXED  propdef
  156.                 pn      -- Property name --
  157.                         -- Constraint: must be unique in property set --
  158.                         NAME    #REQUIRED
  159.                 psn     -- Property set name --
  160.                         -- lextype(NOTATION) --
  161.                         NAME    #REQUIRED
  162.                 lex     -- Lexical type of property if not inherent --
  163.                         -- lextype(qltn|qpn) --
  164.                 inherent -- Source of inherent property --
  165.                         -- lextype(NOTATION) --
  166.                         (SGML|HyTime) #IMPLIED -- Default: not inherent --
  167.                 dspec   -- Definition of specifier for property --
  168.                 deforsyn -- Definition or synonym? --
  169.                         (def|syn) def
  170.                 qpnpsn  -- QPN property set names --
  171.                         -- Constraint: searched in order listed --
  172.                         -- lextype(NOTATION, (s+, NOTATION)*) --
  173.                         NAMES   #IMPLIED        -- Default: standard sets --
  174.                 qltnlmgi -- QLTN lexical model GIs --
  175.                         -- Constraint: searched in order listed --
  176.                         -- lextype(gil) --
  177.                         NAMES   #IMPLIED -- Default: none used -->
  178.  
  179. A.2.1 Useful property sets
  180.  
  181. The following notation declarations identify the sources for the
  182. inherent definitions in the property sets.
  183.  
  184. <!NOTATION SGML         PUBLIC "+//ISO 8879:1986//NOTATION
  185.                                Standard Generalized Markup Language//EN">
  186. <!NOTATION HyTime       PUBLIC "+//ISO/IEC 10744:1992//NOTATION
  187.                                 Hypermedia/Time-based Structuring Language//EN">
  188.  
  189. A.2.1.1  SGML lexical properties
  190.  
  191. These properties are purely lexical.  In a lexical scan they are
  192. satisfied by the occurrence of a string assigned to them by the
  193. concrete syntax of the domain, without regard to context or the
  194. current parsing state.  In a query or proploc they return all the
  195. strings assigned to them, in normalized form with single space between
  196. strings.
  197.  
  198. A.2.1.1.1 HTlex1: SGML character classes
  199.  
  200. <!NOTATION HTlex1       PUBLIC  "+//ISO/IEC 10744:1992//NOTATION 
  201.                                 HTlex1::SGML character classes//EN">
  202.  
  203. The following properties are the four abstract syntax character
  204. classes.  (Ee is excluded because it is a system signal.)
  205.  
  206. <HyPD psn=HTlex1 SGML pn=digit>
  207. <HyPD psn=HTlex1 SGML pn=lcletter>
  208. <HyPD psn=HTlex1 SGML pn=special>
  209. <HyPD psn=HTlex1 SGML pn=ucletter>
  210.  
  211. The following properties are the 14 concrete syntax character classes.
  212.  
  213. <HyPD psn=HTlex1 SGML pn=datachar>
  214. <HyPD psn=HTlex1 SGML pn=delmchar>
  215. <HyPD psn=HTlex1 SGML pn=funchar>
  216. <HyPD psn=HTlex1 SGML pn=lcnmchar>
  217. <HyPD psn=HTlex1 SGML pn=msichar>
  218. <HyPD psn=HTlex1 SGML pn=msochar>
  219. <HyPD psn=HTlex1 SGML pn=msschar>
  220. <HyPD psn=HTlex1 SGML pn=re>
  221. <HyPD psn=HTlex1 SGML pn=rs>
  222. <HyPD psn=HTlex1 SGML pn=sepchar>
  223. <HyPD psn=HTlex1 SGML pn=space>
  224. <HyPD psn=HTlex1 SGML pn=ucnmchar>
  225. <HyPD psn=HTlex1 SGML pn=ucnmstrt>
  226.  
  227. The following properties are syntactic variables derived from the
  228. character classes.
  229.  
  230. <HyPD psn=HTlex1 SGML pn=s>       <!--s ("white space") separator-->
  231. <HyPD psn=HTlex1 SGML pn=fnch>    <!--function character-->
  232. <HyPD psn=HTlex1 SGML pn=nmsch>   <!--name start character-->
  233. <HyPD psn=HTlex1 SGML pn=nmchar>  <!--name character-->
  234. <HyPD psn=HTlex1 SGML pn=muchar>  <!--markup character-->
  235. <HyPD psn=HTlex1 SGML pn=char>    <!--SGML character-->
  236.  
  237.  
  238. A.2.1.1.2 HTlex2: SGML delimiter role names
  239.  
  240.  
  241. <!NOTATION HTlex2       PUBLIC  "+//ISO/IEC 10744:1992//NOTATION
  242.                                 HTlex2::SGML delimiter roles//EN">
  243.  
  244. <HyPD psn=HTlex2 SGML pn=AND>
  245. <HyPD psn=HTlex2 SGML pn=COM>
  246. <HyPD psn=HTlex2 SGML pn=CRO>
  247. <HyPD psn=HTlex2 SGML pn=DSC>
  248. <HyPD psn=HTlex2 SGML pn=DSO>
  249. <HyPD psn=HTlex2 SGML pn=DTGC>
  250. <HyPD psn=HTlex2 SGML pn=DTGO>
  251. <HyPD psn=HTlex2 SGML pn=ERO>
  252. <HyPD psn=HTlex2 SGML pn=ETABO>
  253. <HyPD psn=HTlex2 SGML pn=GRPC>
  254. <HyPD psn=HTlex2 SGML pn=GRPO>
  255. <HyPD psn=HTlex2 SGML pn=LIT>
  256. <HyPD psn=HTlex2 SGML pn=LITA>
  257. <HyPD psn=HTlex2 SGML pn=MDC>
  258. <HyPD psn=HTlex2 SGML pn=MDO>
  259. <HyPD psn=HTlex2 SGML pn=MINUS>
  260. <HyPD psn=HTlex2 SGML pn=MSC>
  261. <HyPD psn=HTlex2 SGML pn=NET>
  262. <HyPD psn=HTlex2 SGML pn=OPT>
  263. <HyPD psn=HTlex2 SGML pn=OR>
  264. <HyPD psn=HTlex2 SGML pn=PERO>
  265. <HyPD psn=HTlex2 SGML pn=PIC>
  266. <HyPD psn=HTlex2 SGML pn=PIO>
  267. <HyPD psn=HTlex2 SGML pn=PLUS>
  268. <HyPD psn=HTlex2 SGML pn=REFC>
  269. <HyPD psn=HTlex2 SGML pn=REP>
  270. <HyPD psn=HTlex2 SGML pn=RNI>
  271. <HyPD psn=HTlex2 SGML pn=SEQ>
  272. <HyPD psn=HTlex2 SGML pn=SHORTREF>
  273. <HyPD psn=HTlex2 SGML pn=STAGO>
  274. <HyPD psn=HTlex2 SGML pn=TAGC>
  275. <HyPD psn=HTlex2 SGML pn=VI>
  276.  
  277.  
  278. A.2.1.2 SGML and HyTime semantic properties
  279.  
  280. <!NOTATION HTsem1       PUBLIC "+//ISO/IEC 10744:1992//NOTATION
  281.                                 HTsem1::SGML basic constructs//EN">
  282.  
  283. The properties are checked for validity in the current parsing
  284. context.
  285.  
  286. The following properties are declared value prescriptions of
  287. attributes.
  288.  
  289. <HyPD psn=HTsem1 SGML pn=CDATA>character data</HyPD>
  290. <HyPD psn=HTsem1 SGML pn=ENTITY>general entity name</HyPD>
  291. <HyPD psn=HTsem1 SGML pn=ENTITIES>general entity names</HyPD>
  292. <HyPD psn=HTsem1 SGML pn=ID>id value</HyPD>
  293. <HyPD psn=HTsem1 SGML pn=IDREF>id reference value</HyPD>
  294. <HyPD psn=HTsem1 SGML pn=IDREFS>id reference list</HyPD>
  295. <HyPD psn=HTsem1 SGML pn=NAME>name</HyPD>
  296. <HyPD psn=HTsem1 SGML pn=NAMES>name list</HyPD>
  297. <HyPD psn=HTsem1 SGML pn=NMTOKEN>name token</HyPD>
  298. <HyPD psn=HTsem1 SGML pn=NMTOKENS>name token</HyPD>
  299. <HyPD psn=HTsem1 SGML pn=NOTATION>notation name</HyPD>
  300. <HyPD psn=HTsem1 SGML pn=NUMBER>number</HyPD>
  301. <HyPD psn=HTsem1 SGML pn=NUMBERS>number list</HyPD>
  302. <HyPD psn=HTsem1 SGML pn=NUTOKEN>number token</HyPD>
  303. <HyPD psn=HTsem1 SGML pn=NUTOKENS>number token list</HyPD>
  304.  
  305. The following properties are identifiers of objects or properties.
  306.  
  307. <HyPD psn=HTsem1 SGML pn=ENAME>entity name</HyPD>
  308. <HyPD psn=HTsem1 SGML pn=ATTNAME>attribute name</HyPD>
  309. <HyPD psn=HTsem1 SGML pn=GI>generic identifier</HyPD>
  310. <HyPD psn=HTsem1 SGML pn=CID>ID of current element</HyPD>
  311.  
  312. The following properties relate to the prolog of an SGML document or
  313. subdocument.  
  314.  
  315. <HyPD psn=HTsem1 SGML pn=dtd>document type definition</HyPD>
  316. <HyPD psn=HTsem1 SGML pn=lpd>link process definition</HyPD>
  317. <HyPD psn=HTsem1 SGML pn=ASSGI>associated element type</HyPD>
  318. <HyPD psn=HTsem1 SGML pn=ASSNOT>associated notation name</HyPD>
  319. <HyPD psn=HTsem1 SGML pn=etype dspec=ENAME>entity type</HyPD>
  320. <HyPD psn=HTsem1 SGML pn=attdefs dspec=ASSGI>attribute definition list</HyPD>
  321. <HyPD psn=HTsem1 SGML pn=attdef dspec=ATTNAME>attribute definition</HyPD>
  322. <HyPD psn=HTsem1 SGML pn=ATTDV dspec=ATTNAME>declared value</HyPD>
  323. <HyPD psn=HTsem1 SGML pn=ATTDVNMT>name token in ATTDV name token group</HyPD>
  324.  
  325. The following properties relate to a parsed document instance:
  326.  
  327. <HyPD psn=HTsem1 SGML pn=ent dspec=ENAME>entity</HyPD>
  328. <HyPD psn=HTsem1 syn pn=enot>etype[ENAME]/notation</HyPD>
  329. <HyPD psn=HTsem1 SGML pn=datatts dspec=ENAME>data attribute specification</HyPD>
  330. <HyPD psn=HTsem1 SGML pn=elem dspec=ID>element</HyPD>
  331. <HyPD psn=HTsem1 SGML pn=celem>current element</HyPD>
  332. <HyPD psn=HTsem1 SGML pn=attspecs dspec=ID>attribute specification list</HyPD>
  333. <HyPD psn=HTsem1 SGML pn=linkatts dspec=ID>link attribute specification</HyPD>
  334. <HyPD psn=HTsem1 SGML pn=linkres dspec=ID>result element specification</HyPD>
  335. <HyPD psn=HTsem1 SGML pn=attval dspec=ATTNAME>attribute value</HyPD>
  336.  
  337. A.2.1.2.2 HTsem2        PUBLIC "+//ISO/IEC 10744:1992//NOTATION 
  338.                                HTsem2::HyTime basic constructs//EN">
  339.  
  340. <HyPD psn=HTsem2 HyTime pn=LTN>lexical type name</HyPD>
  341. <HyPD psn=HTsem2 HyTime pn=LMGI lex=GI>lexmodel element type</HyPD>
  342. <HyPD psn=HTsem2 HyTime pn=PN>property name</HyPD>
  343. <HyPD psn=HTsem2 HyTime pn=PSN>property set name</HyPD>
  344. <HyPD psn=HTsem2 HyTime pn=spec>specifier of property</HyPD>
  345. <HyPD psn=HTsem2 HyTime pn=FN>function name</HyPD>
  346. <HyPD psn=HTsem2 HyTime pn=OCI>object class identifier</HyPD>
  347. <HyPD psn=HTsem2 HyTime pn=PCOBJ>PTR to current object</HyPD>
  348. <HyPD psn=HTsem2 HyTime pn=NLNAME>HyQ node list name</HyPD>
  349. <HyPD psn=HTsem2 HyTime pn=REFTYPE>reference type</HyPD>
  350. <HyPD psn=HTsem2 HyTime pn=LEXTYPE>lexical type</HyPD>
  351.  
  352. The following properties relate to location addressing:
  353.  
  354. <HyPD psn=HTsem2 HyTime pn=object dspec=PTR>object</HyPD>
  355. <HyPD psn=HTsem2 HyTime pn=cobj>current object</HyPD>
  356. <HyPD psn=HTsem2 HyTime pn=locsrc>location source of object</HyPD>
  357. <HyPD psn=HTsem2 HyTime pn=cand>HyQ selector condidate</HyPD>
  358. <HyPD psn=HTsem2 HyTime pn=DQ>dataloc data quantum</HyPD>
  359. <HyPD psn=HTsem2 HyTime pn=pelement dspec=PTR>pseudo-element</HyPD>
  360. <HyPD psn=HTsem2 HyTime pn=dataent>data entity</HyPD>
  361. <HyPD psn=HTsem2 HyTime pn=dataobj dspect=PTR>data object</HyPD>
  362. <HyPD psn=HTsem2 HyTime pn=elpelem dspec=PTR>element or pseudo-element</HyPD>
  363. <HyPD psn=HTsem2 HyTime pn=NODETYPE>node type:(element|pelement|dataent|dataobj)
  364.                                                                          </HyPD>
  365. <HyPD psn=HTsem2 HyTime pn=docroot>document root</HyPD>
  366. <HyPD psn=HTsem2 HyTime pn=docpos>document position</HyPD>
  367. <HyPD psn=HTsem2 HyTime pn=datapos>data position</HyPD>
  368. <HyPD psn=HTsem2 HyTime pn=apropsrc>additional property source</HyPD>
  369.  
  370. The following properties relate to hyperlinking:
  371.  
  372. <HyPD psn=HTsem2 HyTime pn=hylink dspec=PTR>ilink or clink element</HyPD>
  373. <HyPD psn=HTsem2 HyTime pn=anchors>objects linked by a hylink</HyPD>
  374. <HyPD psn=HTsem2 HyTime pn=ANCHROLE>anchor roles of anchors of hylink</HyPD>
  375. <HyPD psn=HTsem2 HyTime pn=linkedby>hylinks that link an anchor</HyPD>
  376. <HyPD psn=HTsem2 HyTime pn=linkedto>other anchors of linkedby</HyPD>
  377. <HyPD psn=HTsem2 HyTime pn=LINKEDAS>role of anchor in hylink</HyPD>
  378.  
  379. A.2.1.2.3 HTsem3: Unparsed SGML text
  380.  
  381. <!NOTATION HTsem3       PUBLIC "+//ISO/IEC 10744:1992//NOTATION 
  382.                                HTsem3::Unparsed SGML text//EN">
  383.  
  384. Use of this property set requires support of the "unparsed" option in
  385. the base module.
  386.  
  387. <HyPD psn=HTsem3 SGML pn=unpelemen dspec=ID>unparsed element (includes tags)
  388.                                                                        </HyPD>
  389. <HyPD psn=HTsem3 SGML pn=unpcontx>unparsed content (excludes tags)</HyPD>
  390. <HyPD psn=HTsem3 syn  pn=unpcont dspec=ID>unpelem[ID]/unpcontx</HyPD>
  391. <HyPD psn=HTsem3 SGML pn=tag dspec=GI>start-tag</HyPD>
  392. <HyPD psn=HTsem3 SGML pn=unpatt dspec=ATTNAME>attribute value specification
  393.                                                                        </HyPD>
  394. <HyPD psn=HTsem3 SGML pn=KEYWORD></HyPD>
  395.  
  396. A.3 HyQ: HyTime query notation
  397.  
  398. A.3.2 HyQ formal definition
  399.  
  400.                                 -- Conventions --
  401.  
  402. --              'UC'            Reserved name
  403.                 'Ulc('          Reserved operator name
  404.                 !lc             Useful LTN or PN or user-specified text
  405.                 @lc             Attribute defined elsewhere
  406.                 lc              Grammar non-terminal symbol
  407.                 ()?*+|          Meta-ops: grouping opt, orep, rrep, or
  408.                 ''              Delimit meta-ops when used in real syntax
  409.                 two hyphens     Begin and end comments (as in SGML)
  410. --
  411.  
  412.                                 -- Delimiters --
  413. --              Role    String  Description
  414.                 ===     ======  ===========
  415.                 QESC    \       Escape
  416.                 QGRPO   (       Group open
  417.                 QGRPC   )       Group close
  418.                 QLIT    "       Literal start or end
  419.                 QLITA   '       Literal start or end (alternative)
  420. --
  421.  
  422.  
  423.                                 -- HyQ --
  424. HyQ             -- The content of an element that uses the HyQ notation is a 
  425.                    node list that comprises the body of a query.  A qdomain 
  426.                    and args can be specified as attributes of the query 
  427.                    element. --
  428.         qbody
  429.  
  430.  
  431.                                 -- Query --
  432. query           -- A query can be either a direct query or an indirect query --
  433.         (dquery|iquery)
  434.  
  435. dquery          -- Direct query: the query body is specified as a
  436.                    direct argument of the query --
  437.         'Query('qbody (qdomain? args)?')'
  438. iquery          -- Indirect query: the query body is specified indirectly by
  439.                    reference to the fn attribute of another query element --
  440.         'UseQ('@fn (qdomain? args)?')'
  441. qbody           -- Query body --
  442.         nl
  443. qdomain         -- Query domain: node list whose objects are test for inclusion
  444.                    in query result; defaults to DOMTREE if not specified. --
  445.                 -- Qdomain must be specified if there are no args. --
  446.         nl
  447. args            -- Query arguments --
  448.         node*
  449.  
  450.  
  451.                                 -- Nodes --
  452. node            -- Node --
  453.                 -- !literal Delimited data
  454.                         @arg    Argument (conforms to HyFunk ltn=arg)
  455.                         CAND    The candidate currently under test in a select 
  456.                                 function.  CAND has no meaning elsewhere, but
  457.                                 survives in nested queries until stacked when
  458.                                 a nested select function is invoked.
  459.         (!literal|'CAND'|@arg|oo|count)
  460. oo              -- Object of: resolves IDREF to its object --
  461.                 -- Object must be valid in context in which oo occurs --
  462.         'Oo('!idref')'
  463. count           -- Returns the number of quanta in an addressable range.
  464.                    The range is determined from a node list, all of whose nodes
  465.                    are data objects that have a common apropsrc (that is, all of
  466.                    the objects occur within the data of one other object).  The
  467.                    range extends from the first bit combination of the node that 
  468.                    is first in the common containing object, to the last bit 
  469.                    combination of the last node, inclusive. --
  470.         'Count('nl @quantum?')'
  471.  
  472.  
  473.                                 -- Node List --
  474. nl              --Node List --
  475.         ('DOMTREE'|'DOMROOT'|assign|nlref|nlops|nldefs|oo|query)
  476. assign          -- Assign nmae to a node list to allow reuse by nl reference.
  477.                    Name is constant for scope of query body and its nested 
  478.                    queries --
  479.         'Assign('!name nl')'
  480. nlref           -- Node list reference; resolves !name to its node list --
  481.                 -- !name        Name assigne to a node list definition to 
  482.                                 allow reuse by reference; must be unique within
  483.                                 query element.  A node list cannot be referenced
  484.                                 within its own body. --
  485.         'Nlref('!name')'
  486.  
  487.  
  488.                                 -- Node List Operations --
  489. nlops           -- Node list operations (like set operations) --
  490.         (select|create||union|inter|diff)
  491. select          -- Selects resulting nodes by testing specified properties
  492.                    of members of a given node list.  The member under test is 
  493.                    the "candidate" (CAND); it is included in resulting node 
  494.                    list if the assertion returns "TRUE". --
  495. create          -- Create node list: duplicates are not removed. --
  496.                 -- Create() is the empty node list --
  497.                 -- Keyword 'Create' can be omitted --
  498.         'Create'?'('(node|nl)*')'
  499. union           -- Union (sum) of node lists: duplicates are removed. --
  500.         'Union('nl+')'
  501. diff            -- Difference between node lists (non-common membership) --
  502.                 -- Diff of first two nls, then (diff of result and next nl)* --
  503.         'Diff('nl+')'
  504.  
  505.  
  506.                                 -- Node List Definitions --
  507. nldefs          -- Node list definitions --
  508.         (proploc|treeloc|pathloc|listloc|dataloc|hitloc|relloc)
  509. proploc         -- Returns nl of data objects containing property of source 
  510.                    nodes --
  511.                 -- Based on proploc element type form:
  512.                         (node|nl)       Locsrc
  513.                         !qpn            Content
  514.                         @joint          Attribute
  515.                         @aproprsrc      Attribute
  516.                         @notprop        Attribute --
  517.         'Proploc('(node|nl) !qpn @joint? @aproprsrc? @notprop?')'
  518. listloc         -- Pick nodes from list by position --
  519.                 -- Based on listloc element type form:
  520.                         nl              Locsrc
  521.                         mkpair*         Content
  522.                         @overrun        Attribute
  523.                         @set            Attribute
  524.         'Listloc('nl mkpair* @overrun? @set?')'
  525. treeloc         -- Pick node from tree by position --
  526.                 -- Based on treeloc element type form:
  527.                         nl              Locsrc
  528.                         !snzi*          Content
  529.                         @overrun        Attribute
  530.                         @set            Attribute
  531.                         @treecom        Attribute
  532.         'Treeloc('nl !snzi* @overrun? @set? @treecom?')'
  533. pathloc         -- Pick nodes from tree by paths --
  534.                 -- Based on pathloc element type form:
  535.                         nl              Locsrc
  536.                         mkpair*         Content
  537.                         @overrun        Attribute
  538.                         @set            Attribute
  539.                         treecom         Attribute
  540.         'Pathloc('nl mkpair* @overrun? @set? @treecom?')'
  541. relloc          -- Locates relatives by selction from addressable ranges --
  542.                 -- Based on relloc element type form:
  543.                         nl              Locsrc
  544.                         (node|nl)       Root attribute
  545.                         @relation       Attribute
  546.                         mkpair*         Content
  547.                         @overrun        Attribute
  548.                         @set            Attribute
  549.         'Relloc('nl (node|nl) @relation? mkpair* @overrun? @set?')'
  550. dataloc         -- Selects portions of each node in the node list --
  551.                 -- Based on dataloc element type form:
  552.                         nl              Locsrc
  553.                         @quantum        Attribute
  554.                         @catsrc         Attribute
  555.                         @catres         Attribute
  556.                         @mkpair*        Content
  557.                         @overrun        Attribute --
  558.         'Dataloc('nl @quantum? @catsrc? @catres? mkpair* @overrun? ')'
  559. mkpair          -- Pair of axis marker, interpreted as dimspec --
  560.         (!snzi !snzi)
  561. hitloc          -- Returns node list of data objects like that addressed by a 
  562.                    dataloc whose content is a mrkquery whose qdomain is the 
  563.                    dataloc locsrc --
  564.                 -- Each resulting node contains information about the location
  565.                    of the match (the "hit"), in marker pairs (like mrkquery). --
  566.         match
  567.  
  568.                                 -- Pattern Match --
  569. match           -- Pattern match: Returns a node list where each node contains
  570.                    one occurrence of the matching text (a "hit").  That is,
  571.                    one node is returned for each non-overlapping match
  572.                    in the text in each match domain node.  The number
  573.                    of matches per node has to be within hitrange. --
  574.                 -- Hit must be word quantum unless "bigmatch" option is 
  575.                    supported. --
  576.                 -- !qltn        Qualified lexical type name (need not be HyLex)
  577.                    @lexord      Attribute (overrides @lexord on model element)
  578.                                 Defaults to character set order if "mixcase"
  579.                                 option is supported, otherwise to #SGMLCASE
  580.                                 Lexicographic reordering takes place prior to
  581.                                 quantization or other normalization.
  582.                    @boudnary    Attribute (defaults to "ISCIEC") --
  583.         'Match('(node|nl) (hylox|!qltn|!literal) 
  584.         'Oo('@lexord')'? @boundary? hitrange?')'
  585. hylex           -- Local HyLex model --
  586.                 -- Based on HyLex element type:
  587.                    @HyLex       Content (lexical model in HyLex notation)
  588.                    @norm        Attribute
  589.                    @lexord      Attribute --
  590.         'HyLex('('@hylex')' @norm? 'Oo('@lexord')'?')'
  591. hitrange        -- Hit range: 1 <= MINHITS <= hits <= MAXHITS --
  592.                 -- Omitted MAXHITS means no upper limit --
  593.                 -- 1st unzi is MINHITS and 2nd is MAXHITS --
  594.         (%unzi %unzi?)
  595.  
  596.                                 -- Assertion --
  597. assert          -- Assertion: evaluates to "TRUE" or "FALSE" --
  598.         ('TRUE'|'FALSE'|ah|compare|ordered|and|or|not|forall|exists)
  599. ah              -- Assertain handler for user-defined assertion:
  600.                    The IDREF addresses an object that implements the assertion.
  601.                    The node list contains the operands. --
  602.                 -- Requires "uassert" option of location address module. --
  603.         'Ah('!idref nl')'
  604. forall          -- Evaluates to TRUE if the query returns nodes for every node 
  605.                    in nl --
  606.         'Forall('nl query')'
  607. exists          -- When a node list or match occurs where an assertion is 
  608.                    expected, 
  609.                    it evaluates to TRUE if non-empty, FALSE if empty. --
  610.         (nl|match)
  611.  
  612.                                 -- Comparison --
  613. compare         -- Comparison: tests ordering of operands. --
  614.                 -- Operands in nl are data objects or literals --
  615.                 -- Comparisons are done in a way appropriate for the quantum. --
  616.                 -- Relations testes are TRUE if:
  617.                EQ: all operands are equal
  618.                NE: at least two operands are not equal
  619.                LT: each operand is less than its successor
  620.                LE: each operand is less or equal to its successor
  621.                GT: each operand is greater than its successor
  622.                GE: each operand is greater or equal to its successor
  623.                SS: all operands are same size (same number of quanta)
  624.                NS: at least two operands are not the same size
  625.                ST: each operand is smaller (shorter) than its successor
  626.                SE: each operand is smaller (shorter) or equal to its successor
  627.                BT: each operand is bigger (longer) than its successor
  628.                BE: each operand is bigger (longer) or equal to its successor
  629.                HO: each operand holds its successor (proper superstring)
  630.                HE: each operand holds or equals its successor (superstring)
  631.                IH: each operand is held in its successor (proper substring)
  632.                IE: each operand is held in ord equals its successor (substring)
  633.                 -- Use CAND to operate on the candidate node of the active 
  634.                    select. --
  635.         ('EQ'|'NE'|'LT'|'LE'|'GT'|'GE'|'SS'|'NS'|'ST'|'SE'|'BT'|'BE'|'HO'|'HE'|
  636.         'IH'|'IE')'('@quantum?, 'Oo('@lexord')'? (node|nl)+')'
  637. ordered         -- TRUE if all nodes are data objects that have a common 
  638.                    aproprsrc and are ordered within it --
  639.                 -- OVERLAP  TRUE if first bit combination is LE next node's 
  640.                                  first.  
  641.                    NOVERLAP TRUE if each node ends before enxt begins. --
  642.         'Ordered('nl ('OVERLAP'|'NOVERLAP')?')'
  643.  
  644.                                 -- Boolean Expressions --
  645. and             -- TRUE if all its assertions are TRUE --
  646.         'And('assert+')'
  647. or              -- TRUE if any of its assertions are TRUE --
  648.         'Or('assert+')'
  649. not             -- TRUE if its assertion is FALSE --
  650.         'Not('assert')'
  651.  
  652.  
  653.  
  654. A.3.3 HyQ element type
  655.  
  656. The content of a HyQ element is the body of a query in the HyQ
  657. notation.  HyQ query functions can contain arguments whose values are
  658. passed as the "args" attribute of a HyQ element.  The operands are
  659. referenced by placeholders (%1-%999), which are replaced by a node
  660. specified via an IDREF in the "args".  A placeholder can occur
  661. wherever anode con occur.  If no arg was specified for a placeholder,
  662. it is empty.
  663.  
  664. The usefn attribute is supported; it allows an expression to be
  665. created once and given a query function name that can be specified in
  666. other HyQ element that specify arguments for the expression.
  667.  
  668. An instance of a HyQ element type can have either of two architectural
  669. forms, which differ only in the form of address in which the query
  670. results are generated: nmquery, which generates names, and mrkquery,
  671. which generates axis marker.  When a HyQ element is used as a marker
  672. query in a coordinate location address, the default query domain is
  673. the location source of the coordinate location address element.
  674.  
  675.  
  676.                                 <!-- HyTime Query -->
  677.  
  678. <!NOTATION HyQ  PUBLIC  "+//ISO/IEC 10744:1992//NOTATION 
  679.                         HyTime Query Notation//EN">
  680. <!ELEMENT HyQ           -- HyTime query --
  681.                 - O     (#PCDATA) >
  682. <!ATTLIST HyQ   HyTime  (nmquery|mrkquery) nmquery
  683.                 qdomain -- Domain of the query --
  684.                         -- Multiple is combined into a single tree --
  685.                         -- Constraint: No HyTime reftype constraints --
  686.                         IDREFS  #IMPLIED  -- Default: inherent in query --
  687.                 notation  -- Data content notation --
  688.                         NAME    #FIXED          HyQ
  689.                 delims  -- Data content notation delimiter changes --
  690.                         -- Constraint: names are delmiter role names --
  691.                         -- Constraint: a given NAME can occur only once --
  692.                         -- lextype( (NAME, s+, char*),
  693.                                 (s+, NAME, s+, char*0*0 --
  694.                         CDATA   #IMPLIED        -- Default: not changed --
  695.                 fn      -- Query function name --
  696.                         NAME    #IMPLIED
  697.                 usefn   -- Fn of another function to which to pass
  698.                            the args of this one --
  699.                         NAME    #CONREF
  700.                 args    -- Argument string passed to the function --
  701.                         -- Constraint: 1-999 IDREFS --
  702.                         -- Constraint: No HyTime reftype constraints --
  703.                         IDREFS  #IMPLIED -- Defaults: no arguments --
  704.                 qpnpsn  -- QPN property set names --
  705.                         -- Constraint: searched in order listed --
  706.                         -- lextype(NOTATION, (s+, NOTATION)*) --
  707.                         NAMES   #IMPLIED -- Default: standard sets --
  708.                 qltnlmgi -- QLTN lexical model GIs --
  709.                         -- Constraint: searched in order listed --
  710.                         -- lextype(gil) --
  711.                         NAMES   #IMPLIED -- Default: none used -->
  712.  
  713.  
  714. A.3.4 HyQ examples
  715.  
  716. The first example locates all "equation" elements in a document.
  717.  
  718. <HyQ qdomain=mydoc>
  719.         Select(DOMTREE EQ(Proploc(CAND GI) "equation"))
  720. <HyQ>
  721.  
  722. The next example creates a named query that can be reused with an
  723. argument to locate all elements of a specified element type.
  724.  
  725. <HyQ fn=hasgi>
  726.         Select(DOMTREE EQ(Proploc(CAND GI) %1))
  727. </HyQ>
  728.  
  729. The following query locates the second "para" element in the document
  730. that occurs in a "body" element.
  731.  
  732. <HyQ qdomain=mydoc>
  733.     Listloc(
  734.         Select(
  735.             Pathloc(Select(DOMTREE EQ(Proploc(CAND GI) "body"))
  736.                 1 -1 2 -1)
  737.             EQ(Proploc(CAND GI) "para") )
  738.     2 1 )
  739. </HyQ>
  740.  
  741. The last example performs the same search as the preceding one, but it
  742. uses the named query defined in the second example.
  743.  
  744. <HyQ qdomain=mydoc>
  745.     Listloc(
  746.         UseQ(hasgi
  747.             Pathloc(UseQ(hasgi DOMTREE "body")
  748.                 1 -1 2 -1)
  749.             "para )
  750.     2 1 )
  751. </HyQ>
  752.  
  753.  
  754. A.4  Marker functions
  755.  
  756. HyOp is a simple recursive function, while HyFunk allows complex
  757. expressions.  Both use the same set of primitive operators and the
  758. standard HyTIme dimension reference facilities.  An application
  759. designer could create higher-level forms of marker function that
  760. resolve to the primitives used by HyOp and HyFunk.
  761.  
  762. A.4.1  HyOp: HyTime single operator marker function
  763.  
  764.                 <!-- HyTime Single Operator Marker Function -->
  765. <!ELEMENT HyOp          -- HyTime single operator marker function --
  766.                         -- Represents (i.e., function returns) an 
  767.                                 axis marker --
  768.                         -- For use when HyFunk is not available --
  769.                         -- Constraint: marklists are concatenated
  770.                                 into one list --
  771.                 - O     (marklist*) -- Content is "meta" -->
  772. <!ATTLIST HyOp  HyTime  NAME    #FIXED  markfun
  773.                 id      ID      #IMPLIED -- default: none --
  774.                 opname  -- Operator name (same as HyFunk) --
  775.         (sum|subt|mult|div|avg|max|min|abs|nabs|incr|decr|rand|mod)>
  776.  
  777.  
  778. A.4.2 HyFunk: HyTime function notation
  779.  
  780. A.4.2.1 HyFunk syntax and semantics
  781.  
  782. Delimiter roles defined by the HyFunk notation.
  783.  
  784. Role    String  Description
  785. ====    =====   ===========
  786. FESC    \       Description
  787. FGRPO   (       Group open
  788. FGRPC   )       Group close
  789. FRNI    #       Reserved name indicator
  790. FOP     @       Operator name indicator
  791.  
  792.  
  793. The following table shows the syntax of the HyFunk notation, defined
  794. using the HyLex notation.
  795.  
  796. <hylex ltn=HyFunk>(fun)</hylex>
  797. <hylex ltn=fun>(startfun, s*, funbody?, s*, endfun)</hylex>
  798. <hylex ltn=startfun>((operand, (s+, operand)*))</hylex>
  799. <hylex ltn=endfun>(")")</hylex>
  800. <hylex ltn=operand>(fun|dimref|pdimref|snzi|arg)</hylex>
  801. <hylex ltn=dimref>("@",dimop,s*,"(",s*, refbody, s*,")")</hylex>
  802. <hylex ltn=refbody>((IDREF|("#SCOPE")), axisnext?)</hylex>
  803. <hylex ltn=axisnext>(s+, GI)?, (s+, NUMBER)?()</hylex>
  804. <hylex ltn=pdimref>("@",pdimop,s*,"(",s*,prefbody, s*,")")</hylex>
  805. <hylex ltn=prefbody>(IDREF,s+, IDREF, axisnext?))</hylex>
  806. <hylex ltn=mfn>(NAME)</hylex>
  807. <hylex ltn=dimop>(NAME)</hylex>
  808. <hylex ltn=pdimop>(NAME)</hylex>
  809. <hylex ltn=operator>(NAME)</hylex>
  810.  
  811.  
  812. where:
  813.  
  814. mfn             is a marker function name from a HyFunk element.
  815. dimop           is a dimension reference function, corresponding to a 
  816.                 combination of the selcomp and flipa ttributes of a dimref 
  817.                 element, named:
  818.                         first   for a reference to the first quantum
  819.                         last    for a reference to the last quantum
  820.                         qcnt    for a reference to the quantum count
  821.                         flfirst for a reference to the first quantum with flip
  822.                         fllast  for a reference to the last quantum with flip
  823.                         flqcnt  for a reference to the quantum count with flip
  824.                 Its operands are:
  825.                         IDREF   is the first operand, corresponding to the 
  826.                                 elemref attribute of a dimref element.
  827.                         #SCOPE  is an alternative first operand, corresponding 
  828.                                 to #SCOPE as elemref of a dimref within a 
  829.                                 projectr or grpdex.
  830.                         GI      is the optional second operand, corresponding 
  831.                                 to the extref attribute of a dimref element.
  832. pdimop          is a dimension reference function, corresponding to a 
  833.                 combination of the selcomp and flip attributes of a dimref 
  834.                 element that references the projected extent of an event or 
  835.                 event group, named:
  836.                 pfirst          for a reference to the projected first quantum
  837.                 plast           for a reference to the projected last quantum
  838.                 pqcnt           for a reference to the projected quanted count
  839.                 pflfirst        for a reference to the projected first quantum 
  840.                                     with flip.
  841.                 pfllast         for a reference to the projected last quantum 
  842.                                     with flip.
  843.                 pflqcnt         for a reference to the projected quantum count 
  844.                                     with flip.
  845.                 Its operands are:
  846.                         IDREF   is the first operand, corresponding to the 
  847.                                 elemref attribute of a dimref element.
  848.                         IDREF   is the second operand, corresponding to the 
  849.                                 projectr attribute of a dimref element.
  850.                         GI      is the option third operand, corresponding to 
  851.                                 the axisref attribute of a dimref element.
  852.                         NUMBER  is the optional fourth operand, corresponding 
  853.                                 to the extref attribute of a dimref element.
  854. arg             is a placeholder (%1-5999) that is replaced by a snum
  855.                 specified directly or via an IDREF and the "ARGS" attribute 
  856.                 of the HyFunk element containing the function.  If not 
  857.                 specified, it is empty.
  858. operator        is a HyFunk operator.
  859.  
  860. The following table shows each HyFunk operator name, the number of
  861. operands in its function body, and the value it returns.
  862.  
  863. NAME    FUNCTION BODY           RETURNED VALUE
  864. ====    =============           ==============
  865.  
  866. avg     (operand+)              Average of all operands (rounded)
  867. decr    (operand)               Operand decremented by 1.
  868. div     (operand, operand)      First operand divided by second operand 
  869.                                     (truncated).
  870. incr    (operand)               Operand incremented by 1.
  871. max     (operand+)              Highest operand
  872. min     (operand+)              Lowest operand
  873. mod     (operand, operand)      Remainder of first operand divided by second 
  874.                                     operand.
  875. mult    (operand, operand+)     Product of all operands multiplied together.
  876. abs     (operand)               Absolute value of operand.
  877. nabs    (operand)               Negated absolute value of operand.
  878. rand    ()                      Pseudo-random value from 1 through hyqcnt
  879. subt    (operand, operand)      Second operand subtracted from first.
  880. sum     (operand, operand+)     Sum of all operands.
  881.  
  882.  
  883.  
  884. A.4.2.2 HyFunk element type
  885.  
  886. The content of a HyFunk element is an expression in the HyFunk
  887. language.  The expression can contain constant operands and/or
  888. arguments whose values are passed as the "args" attribute of a HyFunk
  889. element.  The usefn attribute is suppored: it allows an expression to
  890. be created once and given a function name that dan be specified in
  891. other HyFunk element that specify arguments for the expression.  See
  892. A.4.2.3 for an example.
  893.  
  894.  
  895.                                 <!-- HyTime Function Notation -->
  896. <!NOTATION HyFunk       PUBLIC  "+//ISO/IEC 10744:1992//NOTATION 
  897.                                 HyTime Function Notation//EN">
  898. <!ELEMENT HyFunk        -- HyTime function notation expression --
  899.                 - O     (#PCDATA) >
  900. <!ATTLIST HyFunk
  901.             HyTime          NAME    #FIXED          markfun
  902.             notation        -- Data content notation --
  903.                             NAME    #FIXED          HyFunk
  904.             delims          -- Data content notation delimiter changes --
  905.                             -- Constraint: names are delimiter role names --
  906.                             -- Constraint: a given NAME con occur only once --
  907.                             -- lextype( (NAME, s+ char*),
  908.                                     (s+, NAME, s+, char*)* ) --
  909.                             CDATA   #IMPLIED        -- Default: not changed --
  910.             fn              -- Marker function name --
  911.                             NAME    #IMPLIED
  912.             usefn           -- Fn of another function to which to pass the args
  913.                                     of this one --
  914.                             NAME    #CONREF
  915.             args            -- Argument string passed to the function --
  916.                             -- Constraint: 1-999 tokens, each being a snum
  917.                                or an IDREF that ultimately located a snum --
  918.                             -- lextype((snum|IDREF), (s+, (snum|IDREF))*) --
  919.                             CDATA   #IMPLIED -- Default: no arguments -->
  920.  
  921.  
  922. A.4.2.3 HyTime Measurement Unit ratio (HMUratio)
  923.  
  924. HMUratio is a practical example of a HyFunk marker function.  It is
  925. for use in scheduled extents occurring in event projectors only.  The
  926. function element accepts a frac in its args and multiplies it by the
  927. qcnt of the projector scope extent.  An optional GI of an exis can be
  928. included as the third arg if the extent is multidimensional.
  929.  
  930. The function expression is:
  931.  
  932. <HyFunk fn=HMUratio>@div(@mult(%1 @qcnt(#SCOPE %3))%2)</HyFunk>
  933.  
  934. Here is how it could be used in one dimension, with a ratio of 3/2:
  935.  
  936. <projectr><extent><dimspec><marklist>
  937.         <HyFunk usefn=HMUratio args="3 2">
  938. </projectr>
  939.  
  940.  
  941.  
  942. A.5  Measurement
  943.  
  944. A.5.1 Useful Standard Measurement Units
  945.  
  946. <!NOTATION gquantum PUBLIC -- Generic Quantum --
  947.         "+//ISO/IEC 10744//NOTATION Virtual Measurement Unit//EN">
  948. <!NOTATION SIsecond PUBLIC -- Time --
  949.         "+//ISO/IEC 10744//NOTATION Systeme International second//EN">
  950. <!NOTATION SImeter PUBLIC -- Length --
  951.         "+//ISO/IEC 10744//NOTATION Systeme International meter//EN">
  952. <!NOTATION virtime PUBLIC -- Virtual Time Unit -
  953.         "+//ISO/IEC 10744//NOTATION Virtual Measurement Unit//EN">
  954. <!NOTATION virspace PUBLIC -- Virtual Space Unit -
  955.         "+//ISO/IEC 10744//NOTATION Virtual Measurement Unit//EN">
  956.  
  957.  
  958. A.5.2 Useful measurement domain definitions
  959.  
  960. HyTime defines five measurement domain definitions for the useful SMU
  961. notation declarations, that can be referenced as public text using the
  962. following SGML formal public identifier:
  963.  
  964. "ISO/IEC 10744:1992//TEXT Useful Measurement Domain Definitions//EN"
  965.  
  966. (The element and attribute list declarations for "measure" and
  967. "granule" are not included here.  They are identical to the
  968. definitions of the architectural forms, except that the content of
  969. "granule" is declared to be empty.)
  970.  
  971. (As the set of granules is unbounded, these measurement domain
  972. definitions are necessarily incomplete.  Granules can be added easily
  973. using the facilities described in 7.3.1.)
  974.  
  975.  
  976. A.5.2.1  Generic quantum
  977.  
  978. <measure smu=gquantum>
  979.         <granule gn=quantum             gd="    1       1 GQUANTUM">
  980.         <granule gn=bit-combination     gd="    1       1 gquantum">
  981.         <granule gn=token               gd="    1       1 gquantum">
  982.         <granule gn=node                gd="    1       1 gquantum">
  983.         <granule gn=cell                gd="    1       1 gquantum">
  984. </measure>
  985.  
  986. A.5.2.2  Virtual time
  987.  
  988. <measure smu=virtime>
  989.         <granule gn=vtu                 gd="    1       1 VIRTIME">
  990. </measure>
  991.  
  992.         
  993. A.5.2.2  Virtual space
  994.  
  995. <measure smu=virspace>
  996.         <granule gn=vsu                 gd="    1       1 VIRSPACE">
  997. </measure>
  998.  
  999.         
  1000. A.5.2.4 Systeme International second
  1001.  
  1002. <measure smu=SIsecond>
  1003.         <granule gn=ysec                gd="    1       1000 zsec">
  1004.         <granule gn=zsec                gd="    1       1000 asec">
  1005.         <granule gn=asec                gd="    1       1000 fsec">
  1006.         <granule gn=fsec                gd="    1       1000 psec">
  1007.         <granule gn=psec                gd="    1       1000 nsec">
  1008.         <granule gn=nsec                gd="    1       1000 usec">
  1009.         <granule gn=usec                gd="    1       1000 msec">
  1010.         <granule gn=msec                gd="    1       10 csec">
  1011.         <granule gn=csec                gd="    1       10 dsec">
  1012.         <granule gn=dsec                gd="    1       10 second">
  1013.         <granule gn=SMPTE-50            gd="    1       50 second">
  1014.         <granule gn=V1250               gd="    1       50 second">
  1015.         <granule gn=NTSC                gd="    1       30 second">
  1016.         <granule gn=SMPTE-240M          gd="    1       30 second">
  1017.         <granule gn=SMPTE-30            gd="    1       30 second">
  1018.         <granule gn=SMPTE-30-drop       gd="    100     2997 second">
  1019.         <granule gn=SMPTE-25            gd="    1       25 second">
  1020.         <granule gn=PAL                 gd="    1       25 second">
  1021.         <granule gn=SECAM               gd="    1       25 second">
  1022.         <granule gn=European            gd="    1       25 second">
  1023.         <granule gn=SMPTE-24            gd="    1       24 second">
  1024.         <granule gn=motion-picture      gd="    1       24 second">
  1025.         <granule gn=SMPTE-24-drop       gd="    100     2396 second">
  1026.         <granule gn=PC-tick             gd="    10      182 second">
  1027.         <granule gn=second              gd="    1       1 SISECOND">
  1028.         <granule gn=dasec               gd="    10      1 second">
  1029.         <granule gn=hsec                gd="    10      1 dasec">
  1030.         <granule gn=ksec                gd="    10      1 hsec">
  1031.         <granule gn=Msec                gd="    1000    1 ksec">
  1032.         <granule gn=Gsec                gd="    1000    1 Msec">
  1033.         <granule gn=Tsec                gd="    1000    1 Gsec">
  1034.         <granule gn=Psec                gd="    1000    1 Tsec">
  1035.         <granule gn=Esec                gd="    1000    1 Psec">
  1036.         <granule gn=Zsec                gd="    1000    1 Esec">
  1037.         <granule gn=Ysec                gd="    1000    1 Zsec">
  1038.         <granule gn=minute              gd="    60      1 second">
  1039.         <granule gn=quarter-hour        gd="    15      1 minute">
  1040.         <granule gn=half-hour           gd="    30      1 minute">
  1041.         <granule gn=hour                gd="    60      1 minute">
  1042.         <granule gn=day                 gd="    24      1 hour">
  1043.         <granule gn=week                gd="    7       1 day">
  1044.         <granule gn=fortnight           gd="    2       1 week">
  1045. <!-- Year and the granules based on it might not be accurate enough
  1046.      for some applications. -->
  1047.         <granule gn=year                gd="    3652422 10000 day">
  1048.         <granule gn=decade              gd="    10      1 year">
  1049.         <granule gn=millenium           gd="    1000    1 year">
  1050. </measure>
  1051.  
  1052.  
  1053.  
  1054. A.5.2.5 Systeme International meter
  1055.  
  1056.  
  1057.  
  1058.  
  1059. <measure smu=SImeter>
  1060.         <granule gn=ym                  gd="    1       1000 zm">
  1061.         <granule gn=zm                  gd="    1       1000 am">
  1062.         <granule gn=am                  gd="    1       1000 fm">
  1063.         <granule gn=fm                  gd="    1       1000 pm">
  1064.         <granule gn=pm                  gd="    1       1000 nm">
  1065.         <granule gn=angstrom            gd="    1       10 nm">
  1066.         <granule gn=nm                  gd="    1       1000 um">
  1067.         <granule gn=um                  gd="    1       1000 mm">
  1068.         <granule gn=mm                  gd="    1       10 cm">
  1069.         <granule gn=cm                  gd="    1       10 dm">
  1070.         <granule gn=dm                  gd="    1       10 meter">
  1071.         <granule gn=meter               gd="    1       1 SIMETER">
  1072.         <granule gn=dam                 gd="    10      1 meter">
  1073.         <granule gn=hm                  gd="    10      1 dam">
  1074.         <granule gn=km                  gd="    10      1 hm">
  1075.         <granule gn=Mm                  gd="    1000    1 km">
  1076.         <granule gn=nautical-mile       gd="    1852    1 meter">
  1077.         <granule gn=Gm                  gd="    1000    1 Mm">
  1078.         <granule gn=AU                  gd="    1       206265 parsec">
  1079.         <granule gn=Tm                  gd="    1000    1 Gm">
  1080.         <granule gn=lightyear           gd="    100     326 parsec">
  1081.         <granule gn=Pm                  gd="    1000    1 Tm">
  1082.         <granule gn=parsec              gd="    3086    1 Tm">
  1083.         <granule gn=Em                  gd="    1000    1 Pm">
  1084.         <granule gn=Zm                  gd="    1000    1 Em">
  1085.         <granule gn=Ym                  gd="    1000    1 Zm">
  1086.         <granule gn=microinch           gd="    1       1000 milliinch">
  1087.         <granule gn=milliinch           gd="    1       1000 inch">
  1088. <!-- Point and pica are the rounded versions commonly used in computer
  1089.      systems and might not be accurate enough for some applications. -->
  1090.         <granule gn=point               gd="    1       12 pica">
  1091.         <granule gn=pica                gd="    1       6 inch">
  1092.         <granule gn=barleycorn          gd="    1       3 inch">
  1093.         <granule gn=nail                gd="    1       16 yard">
  1094.         <granule gn=inch                gd="    254     100 cm">
  1095.         <granule gn=thumb               gd="    1       1 inch">
  1096.         <granule gn=hand                gd="    4       1 inch">
  1097.         <granule gn=Roman-foot          gd="    1164    1 inch">
  1098.         <granule gn=foot                gd="    12      1 inch">
  1099.         <granule gn=Greek-foot          gd="    1244    100 inch">
  1100.         <granule gn=Northern-foot       gd="    11      10 foot">
  1101.         <granule gn=cubit               gd="    18      1 inch">
  1102.         <granule gn=Sumerian-cubit      gd="    495     10 cm">
  1103.         <granule gn=royal-cubit         gd="    2062    100 inch">
  1104.         <granule gn=yard                gd="    3       1 foot">
  1105.         <granule gn=ell                 gd="    5       4 yard">
  1106.         <granule gn=fathom              gd="    6       1 foot">
  1107.         <granule gn=perch               gd="    11      2 yard">
  1108.         <granule gn=pole                gd="    1       1 perch">
  1109.         <granule gn=rod                 gd="    1       1 perch">
  1110.         <granule gn=chain               gd="    66      1 feet">
  1111.         <granule gn=furlong             gd="    220     1 yard">
  1112.         <granule gn=quarter-mile        gd="    440     1 yard">
  1113.         <granule gn=mile                gd="    1760    1 yard">
  1114.         <granule gn=league              gd="    3       1 mile">
  1115. </measure>
  1116.  
  1117.  
  1118. A.5.3 Other standard measurement units
  1119.  
  1120.  
  1121. The following notation declarations can be used for virtual reality
  1122. applications or other situations that required units of measure other
  1123. than temporal, spatial, and generic quanta.  The comprise the
  1124. remaining Systeme International base units and supplementary units.
  1125.  
  1126. <!NOTATION SIkg         PUBLIC -- Mass --
  1127.         "+//ISO/IEC 10744//NOTATION Systeme International kilogram//EN">
  1128. <!NOTATION SIkelvin     PUBLIC -- Thermodynamic Temperature --
  1129.         "+//ISO/IEC 10744//NOTATION Systeme International kelvin//EN">
  1130. <!NOTATION SIcd         PUBLIC -- Luminous Intensity --
  1131.         "+//ISO/IEC 10744//NOTATION Systeme International candela//EN">
  1132. <!NOTATION SIampere     PUBLIC -- Electric Current --
  1133.         "+//ISO/IEC 10744//NOTATION Systeme International ampere//EN">
  1134. <!NOTATION SImole       PUBLIC -- Amount of Substance --
  1135.         "+//ISO/IEC 10744//NOTATION Systeme International mole//EN">
  1136. <!NOTATION SIradian     PUBLIC -- Plane Angle --
  1137.         "+//ISO/IEC 10744//NOTATION Systeme International radian//EN">
  1138. <!NOTATION SIsr         PUBLIC -- Solid Angle --
  1139.         "+//ISO/IEC 10744//NOTATION Systeme International steradian//EN">
  1140.  
  1141. Declarations for other SI derived units should be constructed
  1142. similarly: the notation name should consist of the letters "SI"
  1143. followed by the special name of the derived unit if it is 6 characters
  1144. or less, otherwise by the symbol for the derived unit.  (The special
  1145. name and the symbol can be found ins ISO 31-0:1991.) For example:
  1146.  
  1147. <!NOTATION SIC          PUBLIC -- Celsius Temperature --
  1148.         "+//ISO/IEC 10744//NOTATION Systeme International degree Celsius//EN">
  1149.  
  1150.  
  1151. <!-- Here ends the material extracted from Annex A of the HyTime
  1152. standard. -->
  1153.  
  1154.